package br.fbv.compreja.negocio.produto;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.content.Context;
import br.fbv.compreja.negocio.infra.BaseDao;

public class ProdutoDAO extends BaseDao {

	private static final String TABLE_PRODUTO_IMAGEM = "produto_imagem";
	private static final String TB_COL_URL_IMAGEM = "url_imagem";
	private static final String TB_COL_IMAGEM_ID = "img_id";
	private static final String TB_COL_BARCODE = "barcode";
	private static final String TB_COL_NOME = "nome";
	private static final String TB_COL_DESCRICAO = "descricao";
	private static final String TB_COL_PRECO = "preco";
	private static final String TB_COL_FOTO_P = "foto_p";

	public ProdutoDAO(Context context) {
		super(context);
	}

	@Override
	protected String getReferenceTable() {
		return "PRODUTO";
	}

	@Override
	protected String getKeyColumn() {
		return TB_COL_BARCODE;
	}

	@Override
	protected String getDefaultOrderBy() {
		return TB_COL_NOME;
	}

	@Override
	protected String[] getTableColumns() {
		return new String[] { TB_COL_BARCODE,//
				TB_COL_DESCRICAO,//
				TB_COL_FOTO_P,//
				TB_COL_NOME,//
				TB_COL_PRECO,//
		};
	}

	public void incluir(Produto produto) {

		Map<String, String> map = new HashMap<String, String>();
		map.put(TB_COL_BARCODE, produto.getBarcode());
		map.put(TB_COL_DESCRICAO, produto.getDescricao());
		map.put(TB_COL_FOTO_P, produto.getUrlImagemP());
		map.put(TB_COL_NOME, produto.getNome());
		map.put(TB_COL_PRECO, produto.getPreco().toString());
		insert(map);

		Map<String, String> mapImagem = new HashMap<String, String>();
		for (String imgURL : produto.getImagensURL()) {
			mapImagem.put(TB_COL_IMAGEM_ID,
					getNextIDFor(TABLE_PRODUTO_IMAGEM, TB_COL_IMAGEM_ID)
							.toString());
			mapImagem.put(TB_COL_BARCODE, produto.getBarcode());
			mapImagem.put(TB_COL_URL_IMAGEM, imgURL);
			insert(mapImagem, TABLE_PRODUTO_IMAGEM);
		}
	}

	public Produto buscar(String barcode) {
		Map<String, String> produtoMap = findByID(barcode);
		Produto produto = new Produto();
		produto.setBarcode(produtoMap.get(TB_COL_BARCODE));
		produto.setDescricao(produtoMap.get(TB_COL_DESCRICAO));
		produto.setNome(produtoMap.get(TB_COL_NOME));
		produto.setPreco(Double.valueOf(produtoMap.get(TB_COL_PRECO)));
		produto.setUrlImagemP(produtoMap.get(TB_COL_FOTO_P));
		String whereClause = TB_COL_BARCODE + "= ?";
		List<Map<String, String>> imagensMap = consultar(new String[] {
				TB_COL_IMAGEM_ID, TB_COL_BARCODE, TB_COL_URL_IMAGEM },
				TABLE_PRODUTO_IMAGEM, whereClause, new String[] { barcode });
		for (Map<String, String> map : imagensMap) {
			produto.addImagem(map.get(TB_COL_URL_IMAGEM));
		}
		return produto;
	}
}
